草庐IT

c++ 除以 0

全部标签

java - 右移在 -1 上执行除以 2

我知道我可以使用右移执行除以2。为简单起见,取一个4位数字系统-1-1111-2-1110-3-1101-4-1100-5-1011-6-1010-7-1001-8-10007-01116-01105-01014-01003-00112-00101-00010-0000如果我尝试执行6/2=0110>>1=0011=3-6/2=1010>>1=1101=-3对+ve和-ve数字都有效然而,当来到11/2=0001>>1=0000=0-1/2=1111>>1=1111=-1-1似乎有一个特殊情况,右移然后将其移动到负无穷大。目前,我需要为此添加一个特殊的if检查,因为我期望-1/2=0。

java - 除以 1e9d 是什么意思?

这是片段:StringmyTime=someTime/1e9d+",";someTime是使用System.nanoTime()派生的。1e9d在这里做什么? 最佳答案 1e9表示10^92d表示2为双数例如系统输出1e9=>1.0E9系统输出10e9=>1.0E10另见Floating-PointLiteralsJava™教程部分。 关于java-除以1e9d是什么意思?,我们在StackOverflow上找到一个类似的问题: https://stackov

java - 正弦的多项式逼近中的这些系数是如何确定的?

背景:我正在用Java编写一些几何软件。我需要Java的BigDecimal类提供的精度。由于BigDecimal不支持三角函数,我想我应该看看Java如何实现标准数学库方法并编写我自己的支持BigDecimal的版本。阅读thisJavaDoc,我了解到Java使用的算法“来自著名的网络库netlib作为包”自由分发数学库”fdlibm。这些算法是用C编程语言编写的,然后可以理解为以所有float执行-遵循Java浮点运算规则的点运算。”我的问题:我查找了fblibm的sin函数,k_sin.c,看起来他们使用13阶泰勒级数来近似正弦(编辑-njuffa评论说fdlibm使用极小极大

java - 使用 >>> 1 如何在将两个数字相加而不是除以 2 时防止溢出?

我看过几个places以下代码建议将数字相加并除以2,特别是在要快速排序的数组中查找中间索引的情况下。intmiddle=(low+high)>>>1;反对intmiddle=(low+high)/2;如果我在基础知识上有误,请纠正我。将位右移1个位置(>>1)具有除以2的效果。由于在java中int是有符号的,我们不想更改第一位,所以我们使用无符号移位运算符>>>。我听说过这样可以防止整数溢出的说法,但我不知道如何做到。根据docs算术运算符负责轮类。这是一个有争议的问题,因为无论如何都会使用括号。如果()中的任何内容溢出,为什么外部的东西会很重要? 最佳

c++ - 优化浮点除法和转换操​​作

我有以下公式floatmean=(r+b+g)/3/255.0f;我想加快速度。有以下前提条件0所以如果我尝试使用这样一个事实>>8就像除以256并且我使用类似floatmean=(float)(((r+b+g)/3)>>8);这将始终返回0。有没有一种方法可以跳过代价高昂的float除法并最终得到介于0和1之间的平均值? 最佳答案 将除法预先转换为可乘常数:a/3/255与相同a*(1/(3*255))所以预先计算:constfloatAVERAGE_SCALE_FACTOR=1.f/(3.f*255.f)然后就去做floatme

c++ - 使用整数除法将 cv::Mat 除以一个数字

在OpenCV中,如果cv::Mat(CV_8U)除以一个数字(int),结果将四舍五入到最接近的数字,例如:cv::Mattemp(1,1,CV_8UC1,cv::Scalar(5));temp/=3;std::cout结果是:OpenCVIntegerDivision:2NormalIntegerDivision:1很明显,即使cv::Mat的类型是CV_8U,OpenCV也不使用整数除法。我的问题是:为什么?不应该将整数划分为整数。为什么OpenCV会出现这种奇怪的行为?我能否在不逐像素迭代和除法的情况下获得整数除法?我目前的解决方案是:for(size_tr=0;r(r);fo

c++ - NAN -> 区分除以零和具有非常大的负值的指数

我包括了一个checkfornan's在我的测试套件中。现在在下一行抛出一个SIGFPEconstdoubleretVal=exp(exponent);指数的值大约为-4000。这当然非常接近于零,如果没有nan检查,计算将继续为零。信号SIGFPE现在被抛出。我假设这是一个denormalnumber(表示为NAN)。如何区分被零除和具有非常大负值的指数?在第二种情况下,在我的情况下使用零进行进一步计算,因为我不需要区分+0和-0。编辑:我尝试了@user2079303的建议。我的代码看起来像这样#includevoidfpe_handler(intsigno,siginfo_t*i

C++ 谷歌测试除以零

我正在学习编写单元测试,并从我想测试的简单“计算器”类开始。我弄清楚了如何使用EXPECT/ASSERT函数,以及测试用例等是什么,但是当我想测试被零除时遇到了问题。有没有可能进行测试?我的意思是,我应该写什么作为测试结果?有没有类似“ERROR”的东西?还是我必须使用异常(exception)?到目前为止,这些是我的测试:TEST(TestCalc,TestPos){Calccalculate;EXPECT_EQ(10.0,calculate.add(5.0,5.0));EXPECT_EQ(9,calculate.mul(3,3));EXPECT_EQ(9,calculate.div

c++ - 最准确的线相交坐标计算与 float ?

我在给定横坐标x处计算直线上一点的纵坐标y。该线由其两个端点坐标(x0,y0)(x1,y1)定义。端点坐标是float,必须以浮点精度进行计算才能在GPU中使用。数学和天真的实现都是微不足道的。设t=(x-x0)/(x1-x0),则y=(1-t)*y0+t*y1=y0+t*(y1-y0)。问题出在x1-x0很小的时候。结果将引入取消错误。当与x-x0中的一个结合时,在除法中我预计t会出现重大错误。问题是是否存在另一种更准确地确定y的方法?即我应该先计算(x-x0)*(y1-y0),然后除以(x1-x0)吗?y1-y0的差异总是很大。 最佳答案

c++ - 不使用字符串也不除以 10 的数字到数字

所以有一个挑战,你必须编写一个代码,将0-999之间的数字拆分成数字,而不使用字符串或除以10。我已经很努力了,但无法想出完美的算法.我的代码用于拆分数字1-99,但我真的认为有一些更好的选择而不使用111if语句。好的,这就是我得到的:#includeintmain(){std::cout>number;intcycles;if(number>100){cycles=3;}elseif(number>10){cycles=2;}else{cycles=1;}intdigit[]={-1,-1,-1};for(inti=0;i>i;return0;}我被卡住了,所以如果有人能够帮助我,